<?php
/**
 * 21、设计模式学习-访问者模式
 * 脚本引入控制器
 * 2020年1月8日00:17:58
 */
namespace Application\Controller;

class ScriptVisitorController extends BaseController
{
    protected $visitors = array('student','teacher');
    // 没有使用访问者模式，根据不同的访问者，引入相应的 style 与 JavaScript
    public function noUseVisitor()
    {
        $role = $_GET['role'];
        if(!in_array($role,$this -> visitors)){
            echo '没有这个访问者';
            exit();
        }
        $role = '\Application\Common\Visitor\NoUseVisitor\\'.ucfirst($role).'Visitor';
        $visitor = new $role;
        $visitor -> getStyle();
        $visitor -> getJavascript();
        // 总结：较为简单，但较为透露实现细节、操作与数据耦合
    }
    // 使用访问者模式，根据不同访问者，获取相应的 style 与 JavaScript
    public function useVisitor()
    {
        $role = $_GET['role'];
        if(!in_array($role,$this -> visitors)){
            echo '没有这个访问者';
            exit();
        }
        $role = '\Application\Common\Visitor\UseVisitor\\'.ucfirst($role).'Visitor';
        $visitor = new $role;
        $script_manager = new \Application\Common\Visitor\UseVisitor\ScriptManager();
        $script_manager -> getScript($visitor);
        // 总结：较为复杂，但隐藏实现细节、操作与数据解耦。
    }
}
